
#ifndef MOD_WC_H
#define MOD_WC_H


using namespace std;

class Mod_wc:public Mod_out_handling
{
    protected:      
  
    virtual int compute (time_intervall &ti);
    
    public:
     map <string,int> IO_options;    
    Mod_wc(Mod_in *iinp);
    ~Mod_wc();
};

class Mod_wc_fc: public Mod_wc
{
    
        protected:
          double epauft;
          double max_possible_evaporation_of_profile(timestamp &ts);
          double max_possible_evaporation_of_segment (timestamp &ts,int zn);
          double get_ETR(time_intervall &ti);
          double wcint (int layer,time_intervall &ti);
          double guelp_surf (time_intervall &ti);
          double guelpprog (int layer,time_intervall &ti);
          double h_after_Williams(double wc, int layer,timestamp &ti);
		  double infprog (time_intervall &ti);
		  int compute_one_waha_cycle(time_intervall &ti);
public:
     Mod_PDF *mod_pdf;
	 Mod_ETP *mod_etp;
	 Mod_Surface_water *mod_surface_water;
	 Mod_Crop *mod_crop;
	 Mod_Soiltemp *mod_soiltemp;
	 
	 Mod_wc_fc(map <string,int> &iIO_options,
                  Mod_in *iinp,
                  Mod_PDF *imod_pdf,
                  Mod_ETP *imod_etp,
                  Mod_Soiltemp *imod_soiltemp,
                  Mod_Surface_water *imod_surface_water,
                  Mod_Crop *imod_crop); 
    int compute(time_intervall &ti);
    int initialize();                    
};
#endif